// 所谓抽象类，是指**只能被继承，但不能被实例化的类**，就这么简单。

// 抽象类有两个特点：

// - 抽象类不允许被实例化
// - 抽象类中的抽象方法必须被子类实现

abstract class Animal {
  public name: string;
  //   实例方法--
  public constructor(name: string) {
    this.name = name;
  }

  //   抽象方法--实例方法--子类必须实现
  public abstract run(): void;
}
// let a1 = new Animal();

class Cat extends Animal {
  constructor(name: string) {
    super(name);
  }

  //   抽象方法子类必须重写
  run() {}
}
